import sqlite3
import os

from django.core.management.base import BaseCommand


class Command(BaseCommand):
    help = "Creates a backup of the linkding database"

    def add_arguments(self, parser):
        parser.add_argument('destination', type=str, help='Backup file destination')

    def handle(self, *args, **options):
        destination = options['destination']

        def progress(status, remaining, total):
            self.stdout.write(f'Copied {total-remaining} of {total} pages...')

        source_db = sqlite3.connect(os.path.join('data', 'db.sqlite3'))
        backup_db = sqlite3.connect(destination)
        with backup_db:
            source_db.backup(backup_db, pages=50, progress=progress)
        backup_db.close()
        source_db.close()

        self.stdout.write(self.style.SUCCESS(f'Backup created at {destination}'))
